Skip to content

check_drivesize: improve detection of drives out of the drive argument#410

Merged
inqrphl merged 13 commits into
mainfrom
check-drivesize-windows-improve-drive-detection-in-custom-paths
Jul 21, 2026
Merged

check_drivesize: improve detection of drives out of the drive argument#410
inqrphl merged 13 commits into
mainfrom
check-drivesize-windows-improve-drive-detection-in-custom-paths

Conversation

@inqrphl

@inqrphl inqrphl commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Detect and work with lowercase/uppercase , with or without semicolon, with or without slashes combinations of drive:

c
c:
c:
c:/
C
C:
C:
C:/

The previous version did not realize when C:\ was directly a drive, and tried to open it and match it to an existing drive.

This worked if it was a normal drive, but failed if it was a network mounted drive, the commit realizes that its a drive and directly uses stats provided by gopsutil. Otherwise it would try opening a handle to the drive root and fail, saying it was not mounted.

Add tests that check both the status line and perfdata labels using regex on all 8 combinations.

@sni check if the perfdata labels in tests look good.

inqrphl and others added 7 commits July 14, 2026 14:11
…t that user can type

add tests that check both the status line and perdata labels using regex
…into check-drivesize-windows-improve-drive-detection-in-custom-paths
…om-paths' of https://github.com/ConSol-Monitoring/snclient into check-drivesize-windows-improve-drive-detection-in-custom-paths
…indows and improve functions overall

output line always uses the format 'C:\' if its a drive. this includes uppercase conversion, adding colon if necessary, adding backslashes if necessarry, converting slashes to backslashes and compacting slashes

perfdata labels append colon if necessary, change existing slashes to backslashes and compact them.

perfdata labels are not kept the same due to compatibility reasons

these are generated in separate functions now called cleanupPathString and getPerflabelPrefix

improvements:

windows CheckDrivesize.setDrives , CheckDrivesize.setVolumes , CheckDrivesize.setShares all try to populate the entry data for 'id' , 'drive' , 'drive_or_id' , 'drive_or_name' , 'drive_or_name_or_id'

improved some error logs, they were not easily understandable if format strings were empty

revise the windows volume discovery, it was causing check to fail due to RDP shared folder
…dows-improve-drive-detection-in-custom-paths
@inqrphl
inqrphl marked this pull request as draft July 15, 2026 14:56
Ahmet Oeztuerk and others added 3 commits July 15, 2026 17:27
fix extra space when loading 'WNetGetLastErrorA ' library, there was a trailing space. Likely never encountered before

add windows build tag to check_drivesize_windows_test.go

fix wrong trace messages in cleanupPathString

make discovery functions use consitent naming: now they all use requiredDrives

fix other comments
…once discovered in drive check and once discovered in volume check
…platforms if drive itself is literally "/"
@inqrphl

inqrphl commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

Fixed an issue about RDP shared folders in volume discovery, I guess I was the first one to encounter it.

More fixes made using AI to review files:

stop cutting trailing slash in condition keywords on non-windows platforms if drive itself is literally "/"

fix extra space when loading 'WNetGetLastErrorA ' function out of library, there was a trailing space. Likely never encountered before

add windows build tag to check_drivesize_windows_test.go

fix wrong trace messages in cleanupPathString

make discovery functions use consitent naming: now they all use requiredDrives

fix other comments

@inqrphl inqrphl left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good,

the folder=X argument output is not completely checked in terms of status line and perfdata labels, but that is not needed right now.

@inqrphl
inqrphl marked this pull request as ready for review July 16, 2026 11:59
Comment thread pkg/snclient/check_drivesize_windows.go Outdated
inqrphl and others added 3 commits July 21, 2026 11:09
…ping should be decided by user

if user calls check_drivesize  without any drive or folder argument, default filter of "mounted = 1" is used. this gives a nice output where everything is mounted to a letter.

if user calls check_drivesize with a drive or folder argument, they are considered to be a filter due to their isFilter being set. in this case the default filter does not work. this means when drive=all / drive=all-volumes is used , and no filter is specified, it will print out volumes that arent mounted. some examples of this include windows recovery volumes
…etter.

the first volume encounted that does not have a drive, meaning drive="" is added.  the next volumes who did not have a drive, meaning drive="" would not be added , since requiredDrives had "" key already. deduplicate only if the drive is non-empty now
@inqrphl
inqrphl merged commit fecdf4e into main Jul 21, 2026
149 checks passed
@inqrphl
inqrphl deleted the check-drivesize-windows-improve-drive-detection-in-custom-paths branch July 21, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants